//Grunt的入口文件
//用于去定义一些Grunt自动执行的任务

//这个文件需要导出一个函数
//该函数需要接收一个叫grunt的形参（grunt是一个对象 该对象里存放grunt的api，可以借助这些api快速创建一些任务）

module.exports = grunt => {

    //grunt任务可以有多个任务

    /**
     * registerTask 注册任务的API
     * @param 任务执行的名字
     * @param 任务函数 （任务执行时的自动执行的函数）
     */
    grunt.registerTask('log0', () => {
        console.log('hello the progress log')
    })

    /**
     * log1任务
     * @param 任务名称
     * @param grunt 的帮助信息
     * @param 任务函数
     */
    grunt.registerTask('log1', 'logDesc', () => {
        console.log('hello the logDesc log')
    })

    /**
     * grunt 的默认任务
     */
    // grunt.registerTask('default', () => {
    //     console.log('the default Task')
    // })

    /**
     * 运行默认任务 直接执行多个其他的任务
     * 如果第二个参数为数组 依次执行两个其他的任务
     */
    grunt.registerTask('default', ['log0', 'log1'])

    /**
     * grunt 中的异步执行任务
     */
    // grunt.registerTask('async-task', () => {
    //     setTimeout(() => {
    //         console.log('the async task')
    //     }, 1000)
    // })

    /**
     * 异步函数执行  使用this.async
     * 定义一个this.async的异步任务的回调函数 异步函数执行结束在后面再执行一个这个回调函数说明函数执行完毕，
     * 只有这个函数执行结束 grunt才会结束执行
     */
    grunt.registerTask('async-task', function () {
        let done = this.async()

        setTimeout(() => {
            console.log('the async-task')
            done()
        }, 1000)
    })

    /**
     * 失败函数 如果一个函数里面的任务失败了 就返回一个false
     */
    grunt.registerTask('bad', () => {
        console.log('the bad task')
        return false
    })

    /**
     * 异步失败的任务实现方式
     */
    grunt.registerTask('async-bad', function () {
        let done = this.async()

        setTimeout(() => {
            console.log('the async task!')
            done(false)
        }, 1000)
    })

    
}